home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / vdiutil.i < prev    next >
Text File  |  1997-10-26  |  8KB  |  225 lines

  1. IMPLEMENTATION MODULE VDIUtil;
  2.  
  3. FROM SYSTEM          IMPORT ADDRESS, ADR, WORD, LOC;
  4.  
  5. IMPORT MagicAES;
  6. IMPORT mtUtils;
  7. IMPORT MagicConvert;
  8. IMPORT WinDials;
  9. IMPORT WdwManager;
  10. FROM Void IMPORT v;
  11.  
  12. PROCEDURE SetObjColor (tr: ADDRESS; ob : INTEGER; foreground, background : INTEGER);
  13.   VAR tree : POINTER TO ARRAY [0..255] OF MagicAES.OBJECT;
  14.       tmp  : BITSET;
  15. BEGIN
  16.   tree := tr;
  17.   foreground := foreground MOD 16;
  18.   background := background MOD 16;
  19.   CASE tree^[ob].obType OF
  20.     MagicAES.GBOX,
  21.     MagicAES.GIBOX,
  22.     MagicAES.GBOXCHAR  : (* Boxinfo-Struktur *)
  23.                 tmp := tree^[ob].obSpec.Box.flags;
  24.                 tmp := BITSET(background) + {4..6} + BITSET(foreground * 256) + BITSET(CARDINAL(foreground) * 4096);
  25.                 tree^[ob].obSpec.Box.flags := tmp;
  26.                 (*
  27.                 (* Innenfarbe setzen auf Hintergrundfarbe *)
  28.                 tree^[ob].obSpec.Box.flags := tree^[ob].obSpec.Box.flags - {0..3} + BITSET(background);
  29.                 (* Textfarbe setzen *)
  30.                 tree^[ob].obSpec.Box.flags := tree^[ob].obSpec.Box.flags - {8..11} + BITSET(foreground*256);
  31.                 (* Muster noch auf Solid setzen *)
  32.                 tree^[ob].obSpec.Box.flags := tree^[ob].obSpec.Box.flags - {4..6} + BITSET(7*16);
  33.                 *)
  34.                 |
  35.     MagicAES.GTEXT,
  36.     MagicAES.GFTEXT,
  37.     MagicAES.GBOXTEXT,
  38.     MagicAES.GFBOXTEXT : (* TEDInfo-Struktur *)
  39.                 tmp := BITSET(tree^[ob].obSpec.TedPtr^.teColor);
  40.                 (* Jetzt aus beiden Farben einen neuen Wert fr tmp berechnen *)
  41.                 tmp := BITSET(background) + {4..6} + BITSET(foreground * 256) + BITSET(CARDINAL(foreground) * 4096);
  42.                 (*
  43.                 (* Rahmenfarbe setzen *)
  44.                 tmp := tmp - {12..15} + BITSET(foreground * 4096);
  45.                 (* Hintergrundfarbe setzen *)
  46.                 tmp := tmp - {8..11} + BITSET(foreground * 256);
  47.                 (* Vordergrundfarbe setzen *)
  48.                 tmp := tmp - {0..3} + BITSET (background);
  49.                 (* auf Solid setzen *)
  50.                 tmp := tmp - {4..6} + {4..6};
  51.                 (* Auf Transparent setzen *)
  52.                 tmp := tmp - {7};
  53.                 *)
  54.                 tree^[ob].obSpec.TedPtr^.teColor := INTEGER(tmp);
  55.                 |
  56.     MagicAES.GIMAGE    : (* Image-Struktur *)
  57.                 tree^[ob].obSpec.ImagePtr^.biColor := foreground;
  58.                 |
  59.     MagicAES.GICON     : (* Icon-Struktur *)
  60.                 tmp := BITSET(tree^[ob].obSpec.IconPtr^.ibChar);
  61.                 (* Hintergrundfarbe setzen *)
  62.                 tmp := tmp - {8..11} + BITSET(background * 256);
  63.                 (* Vordergrundfarbe setzen *)
  64.                 tmp := tmp - {12..15} + BITSET (CARDINAL(foreground) * 4096);
  65.                 tree^[ob].obSpec.IconPtr^.ibChar := INTEGER(tmp);
  66.                 |
  67.   ELSE
  68.   END;
  69. END SetObjColor;
  70.  
  71. PROCEDURE setTreeColor (tr: ADDRESS; startOb, foreground, background : INTEGER);
  72. (* Farben fr einen Objektbaum setzen *)
  73.   VAR tree : POINTER TO ARRAY [0..255] OF MagicAES.OBJECT;
  74.       ob   : INTEGER;
  75.       tmp  : BITSET;
  76. BEGIN
  77.   tree := tr;
  78.   ob := startOb;
  79.   REPEAT
  80.     SetObjColor (tree, ob, foreground, background);
  81.     IF tree^[ob].obHead > 0
  82.     THEN
  83.       setTreeColor (tree, tree^[ob].obHead, foreground, background);
  84.     END;
  85.     ob := tree^[ob].obNext;
  86.   UNTIL (ob <= startOb) OR (tree^[ob].obNext < 0);
  87. END setTreeColor;
  88.  
  89. PROCEDURE SetTreeColor (tr : ADDRESS; foreground, background : INTEGER);
  90. BEGIN
  91.   setTreeColor (tr, 0, foreground, background);
  92. END SetTreeColor;
  93.  
  94.  
  95. PROCEDURE SetLongIntStr (tree: ADDRESS; obj: INTEGER; val : LONGINT);
  96.   VAR str : ARRAY [0..79] OF CHAR;
  97. BEGIN
  98.   MagicConvert.LIntToStr (val, 0, str);
  99.   mtUtils.SetObjcString (tree, obj, str);
  100. END SetLongIntStr;
  101.  
  102. PROCEDURE GetLongIntStr (tree: ADDRESS; obj: INTEGER; VAR val : LONGINT);
  103.   VAR str : ARRAY [0..79] OF CHAR;
  104. BEGIN
  105.   mtUtils.ObjcString (tree, obj, str);
  106.   val := MagicConvert.StrToLInt (str);
  107. END GetLongIntStr;
  108.  
  109. PROCEDURE SetIntStr (tree: ADDRESS; obj: INTEGER; val : INTEGER);
  110.   VAR str : ARRAY [0..79] OF CHAR;
  111. BEGIN
  112.   MagicConvert.IntToStr (val, 0, str);
  113.   mtUtils.SetObjcString (tree, obj, str);
  114. END SetIntStr;
  115.  
  116. PROCEDURE GetIntStr (tree: ADDRESS; obj: INTEGER; VAR val : INTEGER);
  117.   VAR str : ARRAY [0..79] OF CHAR;
  118.       lval: LONGINT;
  119. BEGIN
  120.   mtUtils.ObjcString (tree, obj, str);
  121.   lval := MagicConvert.StrToLInt (str);
  122.   IF (lval > MAX(INTEGER)) THEN val := MAX(INTEGER)
  123.   ELSIF (lval < MIN(INTEGER)) THEN val := MIN (INTEGER)
  124.   ELSE
  125.     val := SHORT (lval)
  126.   END;
  127. END GetIntStr;
  128.  
  129.   TYPE Trick =  POINTER TO RECORD
  130.                   CASE : BOOLEAN OF
  131.                     TRUE:  wert: INTEGER;|
  132.                     FALSE: hi: CHAR;
  133.                            lo: CHAR;|
  134.                   END;
  135.                  END;
  136.  
  137. TYPE  PtrObjTree = POINTER TO ARRAY [0..MAX(CARDINAL)] OF MagicAES.OBJECT;
  138.  
  139. PROCEDURE SetXString (tree  : ADDRESS; obj: INTEGER;
  140.                       sTree : ADDRESS; idx: INTEGER);
  141.   VAR t       : Trick;
  142.       selStr  : ARRAY [0..40] OF CHAR;
  143. BEGIN
  144.   mtUtils.ObjcString (sTree, idx+1, selStr);
  145.   mtUtils.SetObjcString (tree, obj, selStr);
  146. END SetXString;
  147.  
  148. PROCEDURE SetXState (tree : ADDRESS; obj: INTEGER; xState : INTEGER);
  149.   VAR t : Trick;
  150.       tr: PtrObjTree;
  151. BEGIN
  152.   tr := tree;
  153.   t := ADR (tr^[obj].obState);
  154.   t^.hi := CHR(xState);
  155. END SetXState;
  156.  
  157. PROCEDURE GetXState (tree : ADDRESS; obj: INTEGER) : INTEGER;
  158.   VAR t : Trick;
  159.       tr: PtrObjTree;
  160. BEGIN
  161.   tr := tree;
  162.   t := ADR (tr^[obj].obState);
  163.   RETURN INTEGER(ORD (t^.hi));
  164. END GetXState;
  165.  
  166. PROCEDURE FormHandle(form : ADDRESS):INTEGER;
  167. VAR exit   : INTEGER;
  168. BEGIN
  169.   exit := WinDials.WinDialDo(form, 0);
  170.   exit := INTEGER(BITSET(exit) - {15});
  171.   mtUtils.ExclState(form, exit, MagicAES.SELECTED);
  172.   RETURN exit
  173. END FormHandle;
  174.  
  175. PROCEDURE isKey(VAR kstate : BITSET; VAR scan, char : CHAR):BOOLEAN;
  176. (* sieht per event_multi nach, ob ein Buchstabe vorliegt *)
  177. VAR z : CARDINAL;
  178.     mBuff: ARRAY [0..15] OF INTEGER;
  179.     dr   : RECORD
  180.              CASE :BOOLEAN OF
  181.                TRUE : x,y,w,h : INTEGER|
  182.                FALSE: adr, dum: ADDRESS
  183.              END
  184.            END;
  185.     event,
  186.     evnt      : BITSET;
  187.     doExit    : BOOLEAN;
  188.     moX, moY  : INTEGER;
  189.     moButton  : BITSET;
  190.     kReturn   : INTEGER;
  191.     moKState  : BITSET;
  192.     bReturn   : INTEGER;
  193.     sc        : INTEGER;
  194. BEGIN
  195.     (* Hier bei MultiTasking noch eine kleiner EventMulti und ein paar
  196.      * Events verarbeiten 
  197.      *)
  198.   LOOP
  199.     evnt := MagicAES.EvntMulti(
  200.                {MagicAES.MUMESAG, MagicAES.MUKEYBD, MagicAES.MUTIMER},
  201.                 0,{},{}, 0,dr, 0, dr, mBuff, 0, 0,
  202.                 moX, moY, moButton, kReturn, moKState, sc, char, bReturn);
  203.     (* Den Timerevent brauchen wir nicht *)
  204.     event := evnt;
  205.     EXCL (event, MagicAES.MUTIMER);
  206.     doExit := event = BITSET{};
  207.     IF MagicAES.MUKEYBD IN evnt
  208.     THEN
  209.       scan := CHAR(SHORT(sc));
  210.     ELSE
  211.       scan := 0C;
  212.     END;
  213.     (* ESC gedrckt? *)
  214.     doExit := doExit OR ((MagicAES.MUKEYBD IN evnt) & (char = 33C));
  215.     IF doExit THEN EXIT END;
  216.     MagicAES.WindUpdate(MagicAES.BEGUPDATE);
  217.     v.bool := WdwManager.HandleEvent (evnt, mBuff, moButton, moKState, char, scan, kReturn, moX, moY, bReturn);
  218.     MagicAES.WindUpdate(MagicAES.ENDUPDATE);
  219.   END;
  220.   
  221.   RETURN MagicAES.MUKEYBD IN evnt;
  222. END isKey;
  223.  
  224. END VDIUtil.
  225.